--- L-mag 电磁流量计
module(..., package.seeall)

local logtag = "LMGV7"
local cid, uid = 3, 3 -- 默认用3通道
local dtu, udtu = {}, {} -- 配置文件
--local read_dat = '01041010001674C1' --读取全部
--[[ 回复数据解析：
01 04 2C    地址|功能码|长度
C3 36 D9 9A 顺时流量            float
C0 CE F1 AA 顺时流速            float
42 81 51 EC 流量百分比 
42 64 00 00 电导比
00 00 00 4C 正向累计整数部分     long
3E 17 8D 50 正向累计小数部分     float
00 00 00 28 反向向累计整数部分
3D 71 A9 FC 反向累计小数部分
00 05 顺时流量单位
00 01 累计流量单位
00 00 上线报警
00 00 下线报警
10 00 空管报警
10 00 系统报警
C7 D2 CRC效验 ]]
local meter_ins ,meter_val ,meter_warn,addr=0,0,0,1
        
function setDtu(dtup, udtup)
    dtu, udtu = dtup, udtup
    addr = udtu.addr and tonumber(udtu.addr) or 1
    if udtu and tonumber(udtu.dtype) == 5 then sys.taskInit(init) end
end
local function process(data)
    if #data > 0x2c then
        local _, ins = pack.unpack(data:sub(4, 7), ">f")
        meter_ins = string.format("%.2f", ins)
        v_hex = data:sub(20, 23)
        meter_val = tonumber(v_hex:toHex(), 16)
        meter_warn = data:sub(-6, -3):toHex()
        usrdata.update({meter_val, meter_ins, meter_warn})
        if lcd.LCD_DATA[3]:match('累计(.+)') then
            lcd.LCD_DATA[3] ='顺时:' .. (meter_ins or "NULL")
            return
        end
        lcd.LCD_DATA[3] ='累计:' .. (meter_val or "NULL")
    end
end
function init()
    power.openBoost()
    sys.wait(200)
    while true do
        tools.modbus_send(uid,addr,4,0x1010,0x16)
        result, data = sys.waitUntil('UART_READ_DONE_NEXT_' .. uid, 10000)
        if result then
            if (data) then
                process(data)
            end
            sys.wait(5000)
        else
            lcd.LCD_DATA[3] = logtag.." TIMETOU"
        end
    end
end
